package com.mail.server.controller;


import cn.hutool.core.date.DateUtil;
import com.mail.model.db.UmsMenu;
import com.mail.model.db.UmsResource;
import com.mail.model.db.UmsRole;
import com.mail.model.vo.MyPage;
import com.mail.model.vo.UmsMenuVo;
import com.mail.server.common.R;
import com.mail.server.service.UmsRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

/**
 * <p>
 * 后台用户角色表 前端控制器
 * </p>
 *
 * @author WJZ
 * @since 2022-06-20
 */
@RestController
@RequestMapping("/role")
public class UmsRoleController {

	@Autowired
	private UmsRoleService umsRoleService;

	/**
	 * 获取所有角色
	 * 接口地址:/role/listAll
	 * @return
	 */
	@GetMapping("/listAll")
	public R<List<UmsRole>> listAll(){
		List<UmsRole> umsRoles = umsRoleService.listAll();
		return R.success(umsRoles);
	}

	/**
	 * 根据角色名称分页获取角色列表(分页查询)
	 * 接口地址:/role/listAll
	 * @param pageNum
	 * @param pageSize
	 * @param keyword
	 * @return
	 */
	@GetMapping("/list")
	public R<MyPage<UmsRole>> listByPage(@RequestParam(defaultValue = "1") Long pageNum,
										 @RequestParam(defaultValue = "10") Long pageSize,
										 String keyword){
		MyPage<UmsRole> myPage = umsRoleService.listByPage(pageNum, pageSize, keyword);
		return R.success(myPage, "操作成功!");
	}

	/**
	 * 获取角色相关菜单
	 * 接口地址:/role/listMenu/{roleId}
	 * @param roleId
	 * @return
	 */
	@GetMapping("/listMenu/{roleId}")
	public R<List<UmsMenu>> listMenu(@PathVariable("roleId") Long roleId){
		List<UmsMenu> menus = umsRoleService.listMenu(roleId);
		return R.success(menus, "操作成功!");
	}

	/**
	 * 给角色分配菜单
	 * 接口地址:/role/allocMenu
	 * @param menuIds 分配的菜单列表
	 * @param roleId 当前操作的角色id
	 * @return
	 */
	@PostMapping("/allocMenu")
	public R<Integer> allocMenu(@RequestParam("menuIds") List<Long> menuIds,
								@RequestParam("roleId") Long roleId){
		return umsRoleService.allocMenu(roleId, menuIds);
	}

	/**
	 * 给角色分配资源
	 * 接口地址:/role/allocResource
	 * @param resourceIds 分配的资源列表
	 * @param roleId 当前操作的角色id
	 * @return
	 */
	@PostMapping("/allocResource")
	public R<Integer> allocResource(@RequestParam("resourceIds") List<Long> resourceIds,
								@RequestParam("roleId") Long roleId){
		return umsRoleService.allocResource(roleId, resourceIds);
	}

	/**
	 * 获取角色相关资源
	 * 接口地址:/role/listResource/{roleId}
	 * @param roleId
	 * @return
	 */
	@GetMapping("/listResource/{roleId}")
	public R<List<UmsResource>> listResource(@PathVariable("roleId") Long roleId){
		List<UmsResource> umsResources = umsRoleService.listResource(roleId);
		return R.success(umsResources, "操作成功!");
	}

	/**
	 * 添加角色
	 * 接口地址:/role/create
	 * @return
	 */
	@PostMapping("/create")
	public R<Integer> create(@RequestBody UmsRole umsRole){
		return umsRoleService.create(umsRole);
	}

	/**
	 * 批量删除角色
	 * 接口地址:/role/delete
	 * @param ids
	 * @return
	 */
	@PostMapping("/delete")
	public R<Integer> delete(@RequestParam List<Long> ids){
		return umsRoleService.delete(ids);
	}

	/**
	 * 修改角色
	 * 接口地址:/role/update/{id}
	 * @param id
	 * @param umsRole
	 * @return
	 */
	@PostMapping("/update/{id}")
	public R<Integer> update(@PathVariable("id") Long id,
							 @RequestBody UmsRole umsRole){
		return umsRoleService.update(umsRole);
	}

	/**
	 * 修改角色状态
	 * 接口地址:/role/updateStatus/{id}
	 * @param id
	 * @param status
	 * @return
	 */
	@PostMapping("/updateStatus/{id}")
	public R<Integer> updateStatus(@PathVariable("id") Long id,
								   Long status){
		return umsRoleService.updateStatus(id, status);
	}

}
